
namespace Life
{
    interface IGameManager
    {
        // Board size
        int BoardWidth { get; }
        int BoardHeight { get; }

        // Cell growth and death
        bool IsLive(int x, int y);
        void ToggleCell(int x, int y);        
        bool IsClear { get; }
        void Clear();
        void Randomize();

        // Startup / shutdown
        void Initialize();
        void Deactivate();

        // Lifecycle generation
        void Start();
        void Stop();
        bool IsPaused { get; }
        int GenerationIntervalMilliseconds { get; set; }
        int Generation { get; }

        // Saved games
        SaveGameData GetSaveGameData();
        void Update(SaveGameData saveGameData);
    }
}
